//package com.ruoyi.ahs.scheduler;
//
//import com.alibaba.fastjson2.JSONObject;
//import com.ruoyi.ahs.cache.AhsCache;
//import com.ruoyi.ahs.util.AhsUtils;
//import com.ruoyi.ahs.util.RushTaskDto;
//import com.ruoyi.ahs.util.WeChatBotMessageSender;
//import com.ruoyi.common.exception.base.BaseException;
//import com.ruoyi.system.domain.RushConfig;
//import com.ruoyi.system.domain.ahs.*;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//
//import java.time.LocalDateTime;
//import java.util.List;
//import java.util.concurrent.*;
//
///**
// * 新 抢购任务执行调度器
// *
// * @author 辛凤文
// * @since 1.0
// */
//@Component("rushTaskExecutor")
//@Slf4j
//public class RushTaskExecutor {
//
//    public static final ConcurrentMap<String, Product> EXPECTED_PRODUCT_CONTAINER = new ConcurrentHashMap<>();
//
//    private static ExecutorService searchExecutor;
//    private static ExecutorService orderExecutor;
//
//    private static int requestInterval = 10;  // 请求间隔ms
//    private static int orderInterval = 500;  // 下单间隔
//
//    // 搜索商品 生产者线程模型
//    static class SearchProducer implements Runnable {
//
//        @Override
//        public void run() {
//            try {
//                while (!Thread.currentThread().isInterrupted()) {
//                    Thread.sleep(requestInterval);
//                    List<RushTaskDto> tasks = AhsCache.getRushTaskCache();
//                    if (CollectionUtils.isEmpty(tasks)) {
//                        continue;
//                    }
//                    log.info("开始搜索，当前时间：{}", LocalDateTime.now());
//                    for (RushTaskDto task : tasks) {
//                        ProductSearch productSearch = task.getProductSearch();
//                        SearchResult searchResult = AhsUtils.search(productSearch);
//                        if (searchResult.isSuccess()) {
//                            List<Product> productList = searchResult.getData();
//                            if (CollectionUtils.isEmpty(productList)) {
//                                continue;
//                            }
//                            for (Product product : productList) {
//                                if (EXPECTED_PRODUCT_CONTAINER.putIfAbsent(product.getProductNo(), product) == null) {
//                                    log.info("捕获预期产品并加入抢购队列: {}", product);
//                                }
//                            }
//                        } else {
//                            WeChatBotMessageSender.sendMessage("搜索商品失败" + JSONObject.toJSONString(searchResult));
//                            throw new BaseException("搜索商品失败", JSONObject.toJSONString(searchResult));
//                        }
//                    }
//                    log.info("结束搜索，当前时间：{}", LocalDateTime.now());
//                }
//            } catch (InterruptedException e) {
//                Thread.currentThread().interrupt();
//                log.warn("搜索线程被中断，线程名称：{}", Thread.currentThread().getName());
//            } catch (Exception e) {
//                WeChatBotMessageSender.sendMessage("系统搜索异常，异常信息：" + e.getMessage());
//                log.error("系统搜索异常！", e);
//            }
//        }
//    }
//
//    // 下单商品 消费者线程
//    static class OrderConsumer implements Runnable {
//
//        @Override
//        public void run() {
//            try {
//                while (!Thread.currentThread().isInterrupted()) {
//                    Thread.sleep(requestInterval);
//                    if (EXPECTED_PRODUCT_CONTAINER.isEmpty()) {
//                        continue;
//                    }
//                    String randomKey = EXPECTED_PRODUCT_CONTAINER.keySet().stream().findAny().orElse(null);
//                    if (randomKey != null) {
//                        Product product = EXPECTED_PRODUCT_CONTAINER.remove(randomKey);
//                        if (product != null) {
//                            log.info("抢购消费者 {} 正在下单产品: {}", Thread.currentThread().getName(), product);
//                            OrderResult orderResult = createOrder(product);
//                            if (orderResult.isSuccess()) {
//                                WeChatBotMessageSender.sendMessage(String.format("抢购商品成功！订单号:%s", orderResult.getData()), null);
//                            } else {
//                                WeChatBotMessageSender.sendMessage(String.format("抢购失败！原因:%s", orderResult.getResultMessage()), 1);
//                            }
//                            Thread.sleep(orderInterval - requestInterval);
//                        }
//                    }
//                }
//            } catch (InterruptedException e) {
//                Thread.currentThread().interrupt();
//                log.warn("抢购线程被中断，线程名称：{}", Thread.currentThread().getName());
//            } catch (Exception e) {
//                WeChatBotMessageSender.sendMessage("系统抢购异常，异常信息：" + e.getMessage());
//                log.error("系统抢购异常！", e);
//            }
//        }
//    }
//
//    public static void initialize(int searchThreads, int orderThreads, int reqInterval, int ordInterval) {
//        if (reqInterval > ordInterval) {
//            reqInterval = 0;
//        }
//        if (reqInterval > 0) {
//            requestInterval = reqInterval;
//        }
//        if (ordInterval > 0) {
//            orderInterval = ordInterval;
//        }
//        searchExecutor = Executors.newFixedThreadPool(searchThreads);
//        orderExecutor = Executors.newFixedThreadPool(orderThreads);
//        log.info("成功初始化爱回收抢购线程池");
//    }
//
//    public static void startSearch() {
//        if (searchExecutor == null) {
//            throw new IllegalStateException("Search executor not initialized");
//        }
//        for (int i = 0; i < ((ThreadPoolExecutor) searchExecutor).getCorePoolSize(); i++) {
//            searchExecutor.submit(new SearchProducer());
//        }
//        log.info("成功启用爱回收监控");
//    }
//
//    public static void startOrder() {
//        if (orderExecutor == null) {
//            throw new IllegalStateException("Order executor not initialized");
//        }
//        for (int i = 0; i < ((ThreadPoolExecutor) orderExecutor).getCorePoolSize(); i++) {
//            orderExecutor.submit(new OrderConsumer());
//        }
//        log.info("成功启用爱回收下单");
//    }
//
//    public static void shutdown() {
//        log.info("正在关闭爱回收抢购线程池");
//        if (searchExecutor != null) {
//            searchExecutor.shutdownNow();
//            log.info("成功关闭爱回收监控线程池");
//        }
//        if (orderExecutor != null) {
//            orderExecutor.shutdownNow();
//            log.info("成功关闭爱回收下单线程池");
//        }
//
//    }
//
//    /**
//     * 商品下单
//     */
//    private static OrderResult createOrder(Product product) {
//        List<Discount> discountList = product.getDiscountList();
//        String discountCode = null;
//        if (!CollectionUtils.isEmpty(discountList)) {
//            discountCode = discountList.stream()
//                    .filter(d -> "1001".equals(d.getDiscountType()))
//                    .map(Discount::getCode)
//                    .findFirst()
//                    .orElse(discountList.get(0).getCode());
//        }
//
//        Sensors sensors = AhsCache.getSensors();
//        RushConfig config = AhsCache.getCurrentConfig();
//        Order orderDTO = new Order();
//        orderDTO.setProductSerialNo(product.getProductNo());
//        orderDTO.setCityId(config.getCityId());
//        orderDTO.setActivityCode(discountCode != null ? discountCode : config.getActivityCode());
//        orderDTO.setPickupType(config.getPickupType());
//        orderDTO.setAddressId(config.getAddressId() != null ? config.getAddressId() : AhsCache.getAddressId());
//        orderDTO.setSensors(sensors);
//
//        return AhsUtils.createOrder(orderDTO);
//    }
//
//    public void run() {
//        if (AhsCache.searchThreads == 0 || AhsCache.orderThreads == 0) {
//            return;
//        }
//
//        // 先关闭线程池
//        shutdown();
//
//        // 等待搜索线程池中的任务完全终止，设置一个合理的超时时间，比如这里设置为10秒
//        try {
//            if (searchExecutor != null) {
//                if (!searchExecutor.awaitTermination(5, TimeUnit.SECONDS)) {
//                    log.warn("搜索线程池在超时时间内未能完全关闭，可能存在未响应中断的任务");
//                }
//            }
//        } catch (InterruptedException e) {
//            Thread.currentThread().interrupt();
//            log.error("等待搜索线程池关闭时被中断", e);
//        }
//
//        // 等待下单线程池中的任务完全终止，同样设置超时时间为10秒
//        try {
//            if (orderExecutor != null) {
//                if (!orderExecutor.awaitTermination(5, TimeUnit.SECONDS)) {
//                    log.warn("下单线程池在超时时间内未能完全关闭，可能存在未响应中断的任务");
//                }
//            }
//        } catch (InterruptedException e) {
//            Thread.currentThread().interrupt();
//            log.error("等待下单线程池关闭时被中断", e);
//        }
//
//        // 重新初始化线程池
//        initialize(AhsCache.searchThreads, AhsCache.orderThreads,
//                AhsCache.reqInterval, AhsCache.ordInterval);
//
//        // 启动搜索任务
//        startSearch();
//
//        // 启动下单任务
//        startOrder();
//    }
//}
